<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>GeneralConvolution Avisynth Filter</title>
<link rel="stylesheet" type="text/css" href="../../avisynth.css">
</head>
<body>
<h2><a name="Convolution"></a>GeneralConvolution</h2>
<P><code>GeneralConvolution </code>(<var>clip, int &quot;bias&quot;, string &quot;matrix&quot;, float &quot;divisor&quot;, bool &quot;auto&quot;</var>)
<p>Questo filtro esegue una matrix convolution. </p>
<table border="1" width="75%">
  <tr>
    <td width="34%"><var>clip</var> </td>
    <td width="66%">RGB32 clip</td>
  </tr>
  <tr>
    <td width="34%"><var>bias</var> (default 0)</td>
    <td width="66%"> bias aggiuntiva per tarare la total output intensity</td>
  </tr>
  <tr>
    <td width="34%"><var>matrix</var> (default &quot;0 0 0 0 1 0 0 0 0&quot;) </td>
    <td width="66%">pu&ograve; essere una matrice 3x3 o 5x5 con 9 o 25 numeri 
      interi compresi tra -256 e 256</td>
  </tr>
  <tr>
    <td width="34%"> <var>divisor</var> (default 1.0)</td>
    <td width="66%">divide l'output della convolution (calculato prima di aggiungere 
      il bias)</td>
  </tr>
  <tr>
    <td width="34%"><var>auto</var> (default true)</td>
    <td width="66%">Abilita la funzionalit&agrave; di auto scaling. Divide il 
      risultato per la somma degli elementi della matrice. Il valore di <var>divisor</var> 
      &egrave; applicato in aggiunta a questo fattore di auto scaling. Se la somma 
      degli elementi &egrave; zero, auto viene disabilitato.</td>
  </tr>
</table>
<p><var>divisor</var> &egrave; normalmente la somma degli elementi della matrice. 
  Se questa somma &egrave; zero, si devono usare <var>divisor</var> e le impostazioni 
  di <var>bias</var> per correggere i valori dei pixel. <var>bias</var> potrebbe 
  servire se i valori del pixel fossero negativi a causa di convolution. Dopo 
  aver aggiunto il bias, i pixels vengono tagliati a zero (o a 255 se pi&ugrave; 
  grandi di 255). </p>
<p>Alcuni esempi: </p>
<pre># Blur:

GeneralConvolution(0, &quot;
   10 10 10 10 10
   10 10 10 10 10 
   10 10 16 10 10 
   10 10 10 10 10 
   10 10 10 10 10 &quot;, 256, False)
</pre>
<pre># Horizontal (Sobel) edge detection:

GeneralConvolution(128, &quot;
    1  2  1 
    0  0  0 
   -1 -2 -1 &quot;, 8)</pre>
      
<pre># Vertical (Sobel) Edge Detection:

GeneralConvolution(128, &quot;
   1  0 -1 
   2  0 -2 
   1  0 -1 &quot;, 8)</pre>
      
<pre># Displacement (simply move the position
# of the &quot;1&quot; for left, right, up, down)

GeneralConvolution(0,&quot;
   0 1 0 
   0 0 0 
   0 0 0 &quot;)</pre>
      
<pre># Displacement by half pixel up (auto scaling):

GeneralConvolution(0,&quot;
   0 1 0 
   0 1 0 
   0 0 0 &quot;)</pre>
      
<pre># Displacement by half pixel right (manual scaling):

GeneralConvolution(0,&quot;
   0   0   0 
   0 128 128 
   0   0   0 &quot;, 256, False)</pre>
      
<pre># Sharpness filter:

GeneralConvolution(0,&quot;
   0   -1   0 
  -1    5  -1 
   0   -1   0 &quot;, 1, True)

In this case, the the new pixel values y(m,n) are given by
y(m,n) = (-1*x(m-1,n) - 1*x(m,n-1) + 5*x(m,n) - 1*x(m,n+1)
         - 1*x(m+1,n))/(-1-1+5-1-1)/1.0 + 0</pre>
      
<pre># Slight blur filter with black level clipping and 25% brightening:

GeneralConvolution(-16,&quot;
   0   12   0 
  12  256  12 
   0   12   0 &quot;, 0.75 ,True)

In this case, the the new pixel values y(m,n) are given by
y(m,n) = ( 12*x(m-1,n) + 12*x(m,n-1) + 256*x(m,n) + 12*x(m,n+1)
         + 12*x(m+1,n) )/(12+12+256+12+12)/0.75 - 16</pre>
      
<p>Ulteriori esempi si trovano <a href="http://www.gamedev.net/reference/programming/features/imageproc/page2.asp"><cite>qui</cite></a>.</p>
<p><b>Changelog:</b></p>
<table border="1">
  <tbody>
    <tr>
      <td>v2</td>
      <td>Initial Release</td>
    </tr>
    <tr>
      <td>v2.55</td>
      <td>added divisor, auto</td>
    </tr>
  </tbody>
</table>
<p><kbd>$Date: 2004/09/26 19:49:40 $</kbd></p>
<FORM>
  <INPUT TYPE="Button" VALUE="Indietro"
onClick="history.go(-1)">
</form>
</body>
</html>
